package com.hmall.api.config;

import com.hmall.api.client.fallback.ItemClientFallbackFactory;
import com.hmall.common.utils.UserContext;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;


public class DefultFeignConfig {

    /**
     * 自定义 OpenFeign 的日志级别
     */
    @Bean
    public Logger.Level feignLogLevel() {
        return Logger.Level.FULL;
    }

    /**
     * 定义 OpenFeign 远程调用的过滤器，用于微服务之间的信息传递
     */
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                // 取出网关过滤器中的 userId
                Long user = UserContext.getUser();
                // 把 userId 保存到 OpenFeign 的过滤器
                if(user != null) {
                    requestTemplate.header(user.toString());
                }
            }
        };
    }

    /**
     * ItemClient 的 Fallback
     */
    @Bean
    public ItemClientFallbackFactory itemClientFallbackFactory() {
        return new ItemClientFallbackFactory();
    }
}
